aboutsummaryrefslogtreecommitdiff
path: root/src/app/(main)/websites/[websiteId]/WebsiteMenu.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/(main)/websites/[websiteId]/WebsiteMenu.tsx')
-rw-r--r--src/app/(main)/websites/[websiteId]/WebsiteMenu.tsx56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/app/(main)/websites/[websiteId]/WebsiteMenu.tsx b/src/app/(main)/websites/[websiteId]/WebsiteMenu.tsx
new file mode 100644
index 0000000..3018953
--- /dev/null
+++ b/src/app/(main)/websites/[websiteId]/WebsiteMenu.tsx
@@ -0,0 +1,56 @@
+import {
+ Button,
+ Icon,
+ Menu,
+ MenuItem,
+ MenuSeparator,
+ MenuTrigger,
+ Popover,
+ Text,
+} from '@umami/react-zen';
+import { Fragment } from 'react';
+import { useMessages, useNavigation } from '@/components/hooks';
+import { Edit, More, Share } from '@/components/icons';
+
+export function WebsiteMenu({ websiteId }: { websiteId: string }) {
+ const { formatMessage, labels } = useMessages();
+ const { router, updateParams, renderUrl } = useNavigation();
+
+ const menuItems = [
+ { id: 'share', label: formatMessage(labels.share), icon: <Share /> },
+ { id: 'edit', label: formatMessage(labels.edit), icon: <Edit />, seperator: true },
+ ];
+
+ const handleAction = (id: any) => {
+ if (id === 'compare') {
+ router.push(updateParams({ compare: 'prev' }));
+ } else if (id === 'edit') {
+ router.push(renderUrl(`/websites/${websiteId}`));
+ }
+ };
+
+ return (
+ <MenuTrigger>
+ <Button variant="quiet">
+ <Icon>
+ <More />
+ </Icon>
+ </Button>
+ <Popover placement="bottom">
+ <Menu onAction={handleAction}>
+ {menuItems.map(({ id, label, icon, seperator }, index) => {
+ return (
+ <Fragment key={index}>
+ {seperator && <MenuSeparator />}
+ <MenuItem id={id}>
+ <Icon>{icon}</Icon>
+ <Text>{label}</Text>
+ </MenuItem>
+ </Fragment>
+ );
+ })}
+ </Menu>
+ </Popover>
+ </MenuTrigger>
+ );
+}